/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package utilitarios;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import modelo.ModeloNotificacao;
import modelo.ModeloReuniao;
import modelo.ModeloUsuario;

/**
 *
 * @author Bruno
 */
public class ControleReunioes {
    conectaBanco conecta = new conectaBanco();
    
    public void inserirReuniao(ModeloReuniao reuniao, int id, int id_gerente){
        conecta.conexao();
        try {
            PreparedStatement pst = conecta.conn.prepareStatement("insert into compromissos (Nome_Reuniao,horaInicio,horaTermino,Descricao,id_usuario,id_gerente) values (?,?,?,?,?,?) ");
            String stringData1 = reuniao.getData();
            SimpleDateFormat formatter = new SimpleDateFormat("dd/mm/yyyy");
            java.sql.Date data = new java.sql.Date(formatter.parse(stringData1).getTime());

            Calendar calendario = new GregorianCalendar();
            calendario.setTime(data);
            String [] hora = reuniao.getHoraInicio().split(":");
            calendario.set(Calendar.HOUR_OF_DAY,Integer.parseInt(hora[0]));         
            calendario.set(Calendar.MINUTE,Integer.parseInt(hora[1]));
            data.setTime(calendario.getTimeInMillis());
            //salva hora de inicio
            pst.setDate(2, data);
            
            hora = reuniao.getHoraFim().split(":");
            calendario.set(Calendar.HOUR_OF_DAY,Integer.parseInt(hora[0]));         
            calendario.set(Calendar.MINUTE,Integer.parseInt(hora[1]));     
            data.setTime(calendario.getTimeInMillis());
            
            pst.setString(1, reuniao.getNome());
            //salva hora de termino
            pst.setDate(3, data);
            pst.setString(4, reuniao.getDescricao());
            pst.setInt(5, id);
            pst.setInt(6, id_gerente);
            pst.executeUpdate();
            
            //Mandar notificacao
            
            ModeloNotificacao not = new ModeloNotificacao();
            not.setNomeReuniao(reuniao.getNome());
            not.setMensagem("Você foi convocado para a reunião no dia : "+reuniao.getData()+
                " com hora de início para : "+reuniao.getHoraInicio()+" e com previsão de término para : "+reuniao.getHoraFim());
            not.setId_usuario(id);
            
            ControleNotificacoes controleN = new ControleNotificacoes();
            controleN.inserirNotificacao(not);
                    
            } catch (ParseException | SQLException ex) {
            Logger.getLogger(ControleReunioes.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public ArrayList verificaDisponibilidade( Date inicio, Date fim){
        ArrayList<Integer> ocupados = new ArrayList<>();
        
        conecta.conexao();
        String sql = "select * from compromissos";
        conecta.executaSQL(sql);
            try {
            conecta.rs.first();
            do {
                if((conecta.rs.getDate("horaInicio").before(inicio) && conecta.rs.getDate("horaTermino").after(inicio)) 
                        || ((conecta.rs.getDate("horaInicio").before(fim) && conecta.rs.getDate("horaTermino").after(fim)))){
                    ocupados.add(conecta.rs.getInt("id"));
                }
            } while (conecta.rs.next());
            
            return ocupados;
            
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro ao fazer login:\nERRO"+ex);
                return ocupados;
            }
    }    
 
    public ArrayList listaReunioes(ArrayList reunioes, int id){
        reunioes = new ArrayList();
        
        
        conecta.conexao();
            String sql = "select * from compromissos where id_usuario='"+id+"'";
            conecta.executaSQL(sql);
            try {
    
            conecta.rs.first();
            do {
                reunioes.add(new Object[]{conecta.rs.getString("Nome_Reuniao"),conecta.rs.getDate("horaInicio"),conecta.rs.getDate("data"),conecta.rs.getString("descricao")});
            } while (conecta.rs.next());
            
            return reunioes;
            
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro ao fazer login:\nERRO"+ex);
                return reunioes;
            }
    }
    
        public void eliminaReuniao(ModeloNotificacao not, ModeloUsuario usuario){
            conecta.conexao();
            conecta.removeSQL("delete from compromissos where Nome_Reuniao='"+not.getNomeReuniao()+
                    "' AND id_usuario='"+usuario.getId()+"'");
            JOptionPane.showMessageDialog(null, "Safado vadiando!");
        }

    public void eliminaUsuario(String text) {
            conecta.conexao();
            ControleUsuarios controle = new ControleUsuarios();
            conecta.removeSQL("delete from compromissos where id_usuario='"+controle.descobreID(text)+"'");
    }
    
}
